home *** CD-ROM | disk | FTP | other *** search
/ Network CD 2 / Network CD - Volume 2.iso / programs / internet / dnet / dnetsolaris.lzh / server / sloadav.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-12  |  1.1 KB  |  75 lines

  1.  
  2. /*
  3.  *    SLOADAV.C
  4.  *
  5.  *    DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved
  6.  *
  7.  *    Reports the load average every 5 minutes or until the connection
  8.  *    is closed.
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <sys/wait.h>
  13. #include <sys/time.h>
  14. #include <sys/resource.h>
  15. #include <errno.h>
  16. #include <signal.h>
  17.  
  18. #include "servers.h"
  19.  
  20. chandler()
  21. {
  22.     union wait stat;
  23.     struct rusage rus;
  24.     while (wait3(&stat, WNOHANG, &rus) > 0);
  25. }
  26.  
  27. main(ac,av)
  28. char *av[];
  29. {
  30.     long chann = DListen(PORT_LOADAV);
  31.     int fd;
  32.     int n;
  33.     char buf[256];
  34.     extern int errno;
  35.  
  36.     if (av[1])
  37.     chdir(av[1]);
  38.     signal(SIGCHLD, chandler);
  39.     signal(SIGPIPE, SIG_IGN);
  40.     for (;;) {
  41.     fd = DAccept(chann);
  42.     if (fd < 0)
  43.         break;
  44.     if (fork() == NULL) {
  45.         do_loadav(fd);
  46.         close(fd);
  47.         _exit(1);
  48.     }
  49.     close(fd);
  50.     }
  51. }
  52.  
  53. do_loadav(fd)
  54. {
  55.     char dummy;
  56.     char buf[256];
  57.     FILE *fi;
  58.  
  59.     while (ggread(fd, &dummy, 1) == 1) {
  60.     fi = popen("uptime", "r");
  61.     if (fi == NULL)
  62.         break;
  63.     if (fgets(buf, 256, fi)) {
  64.         dummy = strlen(buf);
  65.         buf[dummy-1] = 0;
  66.         gwrite(fd, &dummy, 1);
  67.         gwrite(fd, buf, dummy);
  68.     }
  69.     if (ferror(fi))
  70.         break;
  71.     pclose(fi);
  72.     }
  73. }
  74.  
  75.